package cn.tedu.redis.test;

import java.util.UUID;

import org.junit.Test;

import redis.clients.jedis.Jedis;

public class JedisClient {
	/*
	 * 创建一个jedis的连接对象
	 * 选择一个服务端进行连接需要提供ip地址和端口
	 * 如果有密码,jedis客户端需要先执行权限获取
	 * 当创建jedis后获取完权限,就可以根据封装的
	 * 各种api(jedis将api的方法名称做的的命令名称一致)
	 */
	@Test
	public void test01(){
		Jedis jedis=new Jedis("10.42.149.141", 6380);
		//一个jedis的创建相当于在代码内部启动了一个可以
		//连接redis-server的client服务进程
		//可以直接使用jedis对象发送一些底层命令
		Long del = jedis.del("name");//redis-cli> del name
		System.out.println(del);
		String set = jedis.set("name", "王老师");//redis-cli>set name 王老师
		System.out.println(set);
		Long setnx = jedis.setnx("location", "刘老师");//set name haha NX
		System.out.println(setnx);
		
	}
	/*
	 * 生成大量key-value,利用hash取余算法决定
	 * 6379 6380 6381哪个节点处理该数据
	 */
	@Test
	public void test2(){
		//准备好即将使用的3个连接对象
		Jedis j1=new Jedis("10.42.149.141", 6379);
		Jedis j2=new Jedis("10.42.149.141", 6380);
		Jedis j3=new Jedis("10.42.149.141", 6381);
		//执行计算逻辑
		String useKey="";
		for(int i=0;i<100;i++){
			//模拟从业务逻辑key-value
			String key=UUID.randomUUID().toString();
			String value="1111"+i;
			//hash取余的公式
			int result=(key.hashCode()&Integer.MAX_VALUE)%6;
			if(result==0)j1.set(key, value);
			if(result==1)j2.set(key, value);
			if(result==2)j3.set(key, value);
			useKey=key;
		}
		System.out.println(useKey);
		int result=(useKey.hashCode()&Integer.MAX_VALUE)%3;
		if(result==0)System.out.println(j1.get(useKey));
		if(result==1)System.out.println(j2.get(useKey));
		if(result==2)System.out.println(j3.get(useKey));
	}
	@Test
	public void test03(){
		String key=UUID.randomUUID().toString();
		System.out.println(key);
		System.out.println("c1e591b3-0967-49ce-a33a-3f4e6d52c4ba".hashCode());
	}
	//保真运算
	@Test
	public void test04(){
		int a = -183274382;
		System.out.println(Integer.toBinaryString(a));
		System.out.println(Integer.toBinaryString(Integer.MAX_VALUE));
		System.out.println(a&Integer.MAX_VALUE);
	}
}














